<!DOCTYPE html>
<html lang="zh-cn">
    <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="generator" content="Hugo 0.16" />
    <title>java基础知识整理</title>
    
    
    
    <meta name="description" content="description" />
    <meta name="keywords" content='first,article' />
    
        <meta name="author" content="bk201sama" />
    
    
    <link href="" rel="alternate" type="application/rss+xml" title="fuck everyday" />
    <link rel="stylesheet" href="https://bk201sama.github.io/css/bootstrap.min.css" />
    <link rel="stylesheet" href="https://bk201sama.github.io/css/highlightjs-themes/androidstudio.css" />
    <link rel="stylesheet" href="https://bk201sama.github.io/css/font-awesome.min.css" />
    <link rel="stylesheet" href="https://bk201sama.github.io/css/phlat.css" />
    
        
            <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
            <script>
                (adsbygoogle = window.adsbygoogle || []).push({
                    google_ad_client: "ca-pub-XXXXXX",
                    enable_page_level_ads: true
                });
            </script>
        
    
</head>

    <body>
        <nav class="navbar navbar-default navbar-fixed-top">
    <div class="container">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="/">fuck everyday</a>
        </div>
        <div id="navbar" class="navbar-collapse collapse">
            <ul class="nav navbar-nav navbar-right">
                
                    <li>
                        <a href="/">
                            Home
                        </a>
                    </li>
                
                    <li>
                        <a href="/about/">
                            About
                        </a>
                    </li>
                
            </ul>
        </div>
    </div>
</nav>

        <div id="top" class="container">
            <div class="row" id="content-main">
                <div class="col-md-8">
                    <div class="row">
    <div class="col-md-12 content-card">
        <h1>java基础知识整理</h1>
        
            
            <ul class="list-inline meta">
                <li><i class="fa fa-calendar"></i>March 15, 2016</li>
                <li><i class="fa fa-user"></i>bk201sama</li>
                
                    
                    <li><i class="fa fa-folder"></i><a href="https://bk201sama.github.io/categories/java">java</a></li>
                
            </ul>
        
        
    <ul class="list-inline share" style="margin-top: 15px; margin-left: 0px">
        <li class="facebook-share"><a target="_blank" href="http://www.facebook.com/sharer.php?u=https%3a%2f%2fbk201sama.github.io%2f2016%2f03%2fjava%25E5%259F%25BA%25E7%25A1%2580%25E7%259F%25A5%25E8%25AF%2586%25E6%2595%25B4%25E7%2590%2586%2f"><i class="fa fa-facebook fa-lg"></i>Facebook</a></li>
        <li class="googleplus-share"><a target="_blank" href="https://plus.google.com/share?url=https%3a%2f%2fbk201sama.github.io%2f2016%2f03%2fjava%25E5%259F%25BA%25E7%25A1%2580%25E7%259F%25A5%25E8%25AF%2586%25E6%2595%25B4%25E7%2590%2586%2f"><i class="fa fa-google-plus fa-lg"></i>Google+</a></li>
        <li class="twitter-share"><a target="_blank" href="https://twitter.com/share?url=https%3a%2f%2fbk201sama.github.io%2f2016%2f03%2fjava%25E5%259F%25BA%25E7%25A1%2580%25E7%259F%25A5%25E8%25AF%2586%25E6%2595%25B4%25E7%2590%2586%2f&amp;text=java%e5%9f%ba%e7%a1%80%e7%9f%a5%e8%af%86%e6%95%b4%e7%90%86"><i class="fa fa-twitter fa-lg"></i>Twitter</a></li>
        <li class="reddit-share"><a target="_blank" href="http://reddit.com/submit?url=https%3a%2f%2fbk201sama.github.io%2f2016%2f03%2fjava%25E5%259F%25BA%25E7%25A1%2580%25E7%259F%25A5%25E8%25AF%2586%25E6%2595%25B4%25E7%2590%2586%2f&amp;title=java%e5%9f%ba%e7%a1%80%e7%9f%a5%e8%af%86%e6%95%b4%e7%90%86"><i class="fa fa-reddit fa-lg"></i>Reddit</a></li>
        <li class="linkedin-share"><a target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&url=https%3a%2f%2fbk201sama.github.io%2f2016%2f03%2fjava%25E5%259F%25BA%25E7%25A1%2580%25E7%259F%25A5%25E8%25AF%2586%25E6%2595%25B4%25E7%2590%2586%2f"><i class="fa fa-linkedin fa-lg"></i>LinkedIn</a></li>
        <li class="stumbleupon-share"><a target="_blank" href="http://www.stumbleupon.com/submit?url=https%3a%2f%2fbk201sama.github.io%2f2016%2f03%2fjava%25E5%259F%25BA%25E7%25A1%2580%25E7%259F%25A5%25E8%25AF%2586%25E6%2595%25B4%25E7%2590%2586%2f&amp;title=java%e5%9f%ba%e7%a1%80%e7%9f%a5%e8%af%86%e6%95%b4%e7%90%86"><i class="fa fa-stumbleupon fa-lg"></i>StumbleUpon</a></li>
    </ul>


        

<p>对java工程系统化总结.</p>

<h1 id="软件工程">软件工程</h1>

<h2 id="uml-http-www-ibm-com-developerworks-cn-rational-r-uml">UML <a href="http://www.ibm.com/developerworks/cn/rational/r-uml/">http://www.ibm.com/developerworks/cn/rational/r-uml/</a></h2>

<h3 id="用例图">用例图</h3>

<p>用例图描述了系统提供的一个功能单元。在用例图上显示某个用例，可绘制一个椭圆，然后将用例的名称放在椭圆的中心或椭圆下面的中间位置。要在用例图上绘制一个角色（表示一个系统用户），可绘制一个人形符号。</p>

<h3 id="类图">类图</h3>

<p>最上面的部分显示类的名称，中间部分包含类的属性，最下面的部分包含类的操作（或者说&rdquo;方法&rdquo;）。使用带有顶点指向父类的箭头的线段来绘制继承关系，并且箭头应该是一个完全的三角形。</p>

<h3 id="序列图">序列图</h3>

<p>序列图显示具体用例（或者是用例的一部分）的详细流程。序列图有两个维度：垂直维度以发生的时间顺序显示消息/调用的序列；水平维度显示消息被发送到的对象实例。</p>

<h3 id="状态图">状态图</h3>

<p>状态图表示某个类所处的不同状态和该类的状态转换信息。状态图的符号集包括5个基本元素：初始起点，它使用实心圆来绘制；状态之间的转换，它使用具有开箭头的线段来绘制；状态，它使用圆角矩形来绘制；判断点，它使用空心圆来绘制；以及一个或者多个终止点，它们使用内部包含实心圆的圆来绘制。要绘制状态图，首先绘制起点和一条指向该类的初始状态的转换线段。状态本身可以在图上的任意位置绘制，然后只需使用状态转换线条将它们连接起来。</p>

<h3 id="活动图">活动图</h3>

<p>活动图表示在处理某个活动时，两个或者更多类对象之间的过程控制流。活动图的符号集与状态图中使用的符号集类似。像状态图一样，活动图也从一个连接到初始活动的实心圆开始。活动是通过一个圆角矩形（活动的名称包含在其内）来表示的。活动可以通过转换线段连接到其他活动，或者连接到判断点，这些判断点连接到由判断点的条件所保护的不同活动。结束过程的活动连接到一个终止点（就像在状态图中一样）。作为一种选择，活动可以分组为泳道（swimlane），泳道用于表示实际执行活动的对象。</p>

<h3 id="组件图">组件图</h3>

<p>组件图提供系统的物理视图。它的用途是显示系统中的软件对其他软件组件（例如，库函数）的依赖关系。</p>

<h3 id="部署图">部署图</h3>

<p>部署图表示该软件系统如何部署到硬件环境中。它的用途是显示该系统不同的组件将在何处物理地运行，以及它们将如何彼此通信。部署图中的符号包括组件图中所使用的符号元素，另外还增加了几个符号，包括节点的概念。一个节点可以代表一台物理机器，或代表一个虚拟机器节点（例如，一个大型机节点）。</p>

<h2 id="设计模式">设计模式</h2>

<h3 id="原则-参见http-www-cnblogs-com-hellojava-archive-2013-03-15-2960905-html">原则 参见<a href="http://www.cnblogs.com/hellojava/archive/2013/03/15/2960905.html">http://www.cnblogs.com/hellojava/archive/2013/03/15/2960905.html</a></h3>

<ul>
<li>单一职责原则</li>
</ul>

<p>如果一个方法逻辑不复杂的情况下，可以修改方法实现，否则要拆分为两个方法，遵循方法级别的单一职责原则；如果一个类方法不多的情况下，可以只增加方法，而不用分拆为多个类，否则要拆分为多个类，遵循类级别的单一职责原则。</p>

<ul>
<li>里氏替换原则</li>
</ul>

<p>子类可以实现父类的抽象方法，但是不能覆盖父类的非抽象方法；子类中可以增加自己特有的方法；当子类覆盖或实现父类的方法时，方法的前置条件（即方法的形参）要比父类方法的输入参数更宽松；当子类的方法实现父类的抽象方法时，方法的后置条件（即方法的返回值）要比父类更严格。</p>

<ul>
<li>依赖倒置原则</li>
</ul>

<p>高层模块不应该依赖低层模块，两者都应该依赖其抽象；抽象不应该依赖细节；细节应该依赖抽象。</p>

<ul>
<li>接口隔离原则</li>
</ul>

<p>客户端只要依赖它需要的接口，它需要什么接口，就提供什么接口，不提供多余的接口。接口中的方法应该尽量少，不要使接口过于臃肿，不要有很多不相关的逻辑方法。</p>

<ul>
<li>迪米特法则（最少知识原则）</li>
</ul>

<p>一个对象应该对其它对象有最少的了解。</p>

<ul>
<li>开闭原则</li>
</ul>

<p>一个软件实体如类，模块和函数应该对扩展开放，对修改关闭。</p>

<h3 id="26个设计模式">26个设计模式</h3>

<ul>
<li>单例模式</li>
</ul>

<p>设置构造函数private以及返回static实例；饿汉式单例模式，懒汉式单例模式，spring容器默认使用单例模式。</p>

<ul>
<li>工厂方法模式</li>
</ul>

<p>*</p>

        
    <ul class="list-inline tags" style="margin-top: 15px; margin-left: 0px">
        
            <li style=""><a href="https://bk201sama.github.io/tags/first">first</a></li>
        
            <li style=""><a href="https://bk201sama.github.io/tags/article">article</a></li>
        
    </ul>


    </div>
</div>

                    
    
        <div class="row">
            <div class="col-md-12 content-card">
                <div id="disqus_thread"></div>
                <script>
                    (function() {
                        if (window.location.hostname == "localhost") {
                            document.write("Disqus comments are unavailable while serving on localhost or 127.0.0.1");
                            return;
                        }
                        var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
                        var disqus_shortname = 'shortname';
                        dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
                        (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
                    })();
                </script>
                <noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript" rel="nofollow">comments powered by Disqus.</a></noscript>
            </div>
        </div>
    


                </div>
                <div class="col-md-4">
                    <div class="row">
    <div class="col-md-11 col-md-offset-1 card">
        <h5>Search</h5>
        <form action="//google.com/search" method="get" accept-charset="UTF-8" class="search-form">
            <div class="input-group">
                <input class="form-control" type="search" name="q" />
                <span class="input-group-btn">
                    <button class="btn btn-custom" type="submit"><span class="glyphicon glyphicon-search"></span></button>
                </span>
            </div>
            <input type="hidden" name="q" value="site:https://bk201sama.github.io/">
        </form>
    </div>
</div>

                    <div class="row">
    <div class="col-md-11 col-md-offset-1 card">
        <h5>Recent Posts</h5>
        <ul class="list-unstyled posts-recent">
            
                <li><a href="https://bk201sama.github.io/2016/03/2016%E5%B9%B4%E9%A1%B9%E7%9B%AE%E6%80%BB%E7%BB%93/">2016年项目总结</a></li>
            
                <li><a href="https://bk201sama.github.io/2016/03/java%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86%E6%95%B4%E7%90%86/">java基础知识整理</a></li>
            
                <li><a href="https://bk201sama.github.io/2016/03/openwrt%E5%88%9D%E4%BD%93%E9%AA%8C/">openwrt初体验</a></li>
            
                <li><a href="https://bk201sama.github.io/2016/03/%E4%B8%A2%E6%89%8B%E6%9C%BA%E6%84%9F%E6%83%B3/">丢手机感想</a></li>
            
                <li><a href="https://bk201sama.github.io/2016/03/%E4%BD%93%E9%AA%8Candriod/">体验andriod</a></li>
            
        </ul>
    </div>
</div>

                    
    
        <div class="row">
            <div class="col-md-11 col-md-offset-1 card">
                <ins class="adsbygoogle"
                    style="display:block"
                    data-ad-client="ca-pub-XXXXXX"
                    data-ad-slot="9997956765"
                    data-ad-format="auto">
                </ins>
            </div>
        </div>
    


                    
    
        <div class="row">
            <div class="col-md-11 col-md-offset-1 card">
                <h5>categories</h5>
                <ul class="list-unstyled posts-recent">
                    
                        <li><a href="https://bk201sama.github.io/categories/hardware">hardware</a></li>
                    
                        <li><a href="https://bk201sama.github.io/categories/java">java</a></li>
                    
                        <li><a href="https://bk201sama.github.io/categories/life">life</a></li>
                    
                        <li><a href="https://bk201sama.github.io/categories/javascript">javascript</a></li>
                    
                </ul>
            </div>
        </div>
    

    


                    <div class="row">
    <div class="col-md-11 col-md-offset-1 card">
        <h5>Support This Site</h5>
        <p>
            If my blog was helpful to you, then please consider visiting my
            <a href="http://amzn.com/w/1YU2424SGEF1B">Amazon Wishlist</a> or donating via <a href="https://paypal.me/nraboy">Paypal</a>
            or <a href="https://cash.me/$nraboy">Square Cash</a>
        </p>
    </div>
</div>

                </div>
            </div>
        </div>
        <footer class="footer">
    <div class="container">
        <div class="row">
            <div class="col-md-8 col-xs-6">
    <ul class="list-inline links">
        
            <li>
                <a href="/privacy-policy/">
                    Privacy Policy
                </a>
            </li>
        
    </ul>
</div>

            <div class="col-md-4 col-xs-6">
    <ul class="list-inline social-media">
        
        
        
        
        
        
        
        
        
        
        
    </ul>
</div>

        </div>
        <div class="row">
            <div class="col-md-12">
                <p>
                    <a href="https://github.com/nraboy/hugo-phlat-theme">Phlat Theme</a> designed and built by <a href="http://www.nraboy.com">Nic Raboy</a> in San Francisco, California.
                </p>
            </div>
        </div>
    </div>
</footer>

        <div id="back-to-top" class="hidden">
    <a href="#top" class="well well-sm" onclick="$('html,body').animate({scrollTop:0},'slow');return false;">
        <i class="glyphicon glyphicon-chevron-up"></i> Back to Top
    </a>
</div>
<script src="https://bk201sama.github.io/js/jquery-2.2.1.min.js"></script>
<script src="https://bk201sama.github.io/js/bootstrap.min.js"></script>
<script src="https://bk201sama.github.io/js/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
<script>
    if(($(window).height() + 100) < $(document).height()) {
        $('#back-to-top').removeClass('hidden').affix({
            offset: {
                top: 100
            }
        });
    }
</script>

    
        <script>
            
            [].forEach.call(document.querySelectorAll('.adsbygoogle'), function() {
                (adsbygoogle = window.adsbygoogle || []).push({});
            });
        </script>
    


    
    <script>
        (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
        (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
        m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
        })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
        ga('create', 'UA-XXXXX-YY', 'auto');
        ga('send', 'pageview');
    </script>




    </body>
</html>
